עצים מאוזנים Lecture 5 of Geiger & Itai s slide brochure www.cs.technion.ac.il/~dang/courseds תזכורת: משפחת עצים נקראת מאוזנת אם ( h. = (log עצי -3 ועצי דרגות עצי AVL הם עצים מאוזנים. עצי 3- מהווים דוגמא נוספת לעצים מאוזנים. הגדרה: עץ 3- הוא עץ בו כל העלים נמצאים באותה רמה ולכל צומת פנימי או 3 בנים. דוגמאות: חומר קריאה לשיעור זה Chapter 19: B trees (381 39) Chapter 15: Augmenting data structures (81 90) cs,technion Geiger & Itai, 01 1 עצי -3 כמבני נתונים גובה עצי -3 כל עלה מכיל מפתח ורשומה (רק המפתחות נראים בציור). אינדקסים המשמשים בנים ויש בו 1 לכל צמת פנימי 3 הרשומה הנחוצה. 16 5 8 11 1 לחיפוש מספר העלים בעץ -3 מקיים 3 כאשר h הוא גובה העץ. הוכחה: עבור חסם תחתון נבחן את העץ הבינרי השלם הנוצר ע"י סילוק כל ילד שלישי מעץ -3. עבור חסם עליון נבחן את העץ הטרינרי השלם הנוצר ע"י הוספת ילד שלישי לעץ -3 בכל מקום בו חסר ילד. עץ -3 נתון עץ בו כל ילד שלישי סולק עץ בו כל ילד חסר הוסף 5 8 1 16 19 בצומת פנימי בעל שני בנים רשום אינדקס בודד - - הגדול ממש מהמפתח המקסימלי בתת העץ ששורשו הוא הבן הראשון וכן קטן או שווה למפתח המינימלי בתת העץ ששורשו הוא הבן השני. בצומת פנימי בעל שלושה בנים רשומים שני אינדקסים -. < האינדקס הראשון ) ) גדול ממש מהמפתחות בעץ הראשון וקטן שווה מהמפתחות בעץ בשני והאינדקס השני ) ) גדול ממש מהמפתחות בעץ השני וקטן שווה מהמפתחות בעץ השלישי. cs,technion 4 לפיכך הגובה מקיים.log h log כלומר: ).h = Θ(log cs,technion 3 3
חיפוש מפתח בעץ -3 הכנסת מפתח לעץ -3 יהי השורש של העץ. אם עלה, בדוק אם נמצא בצומת. החזר תשובה בהתאם. אם ) < קטן מהמפתח הראשון של :( 1. המשך את החיפוש בבן הראשון של. בהכנסת איבר לעץ -3 מבוצעות הפעולות הבאות:. חיפוש מקומו של המפתח החדש 1. הכנסת עלה למקום החדש וקביעת ערכו.. תיקון העץ כך שלכל צומת יהיו או 3 בנים. התיקון נעשה במסלול החיפוש 3. (1) פעולות. של מהעלה שנוסף ועד השורש. בכל רמה נבצע אחרת, אם ל- רק שני בנים או ש- ( < קטן מהמפתח השני של ): 1. המשך את החיפוש בבן השני של. אחרת, המשך את החיפוש בבן השלישי של...3.4.5 הקשתות המושחרות הן הקשתות בהן יורדים בעת בחיפוש. נמחיש זאת תחילה ע"י מספר דוגמאות., 0 חפש 14:, 3 14 5, 3 14 5 cs,technion 6 cs,technion 5 פרוט פעולת פיצול צומת דוגמא להכנסה לעץ -3 1 3 1,, 3 צעד ראשון:,, 3, 14 5, הכנס :,, 3 14 5, 1 3 4 1 3 4 3 14 5 3 14 5 1 3 1,, 3 3,, צעד שני: 3 צעד שלישי: 14 5, 14 5, T 1 T T 3 T 4 T 1 T T 3 T 4 3 14 5 3 14 5 cs,technion 8 cs,technion
אלגוריתם להכנסת מפתח (חלק ב) בעץ. אם נמצא, סיים. 1. חפש את. אם אינו ב-, יהי הצומת האחרון, שאינו עלה, במסלול,3, החיפוש. (לו היה ב- אזי היה אבי העלה 3 שבו נמצא). 3.,5 צור עלה 14 חדש בעל מפתח, והוסף אותו כבן,5 ל- תוך 14 שמירת הסדר בין הבנים של. (יתכן וכעת יש ל- ארבעה בנים). 3 שלושה 14 5 3 14 הוסף ל- אינדקס נוסף בהתאם לכללי עץ -3. (יתכן וכעת יש 5.4 אינדקסים)...5 6. אם ל- v ארבעה בנים, פצל את לשני צמתים,, וחבר אותם כבנים לאב של צומת תוך שמירה על סדר האינדקסים הנכון. חזור לצעד 5. אם הוא שורש, צור צומת אשר בניו הם הצמתים ו- וסיים. אם ל- שלושה בנים, סיים. אלגוריתם להכנסת מפתח (חלק א) 1. חפש את בעץ. אם נמצא, סיים.. אם אינו ב-, יהי הצומת האחרון, שאינו עלה, במסלול החיפוש. (לו היה ב- אזי היה אבי העלה שבו נמצא). 3. צור עלה חדש בעל מפתח, והוסף אותו כבן ל- תוך שמירת הסדר בין הבנים של. (יתכן וכעת יש ל- ארבעה בנים). 4. הוסף ל- אינדקס נוסף בהתאם לכללי עץ -3. (יתכן וכעת יש ל- שלושה אינדקסים). הכנס :,,, 3, 14 5,, 3 14 5, 3 14 5 3 14 5 cs,technion cs,technion 9 אלגוריתם להכנסת מפתח (במלואו) תכונות תהליך ההוספה חפש את בעץ. אם נמצא, סיים. אם אינו ב-, יהי הצומת האחרון, שאינו עלה, במסלול החיפוש. (לו היה ב- אזי היה אבי העלה שבו נמצא). צור עלה חדש בעל מפתח, והוסף אותו כבן ל- תוך שמירת הסדר בין הבנים של. (יתכן וכעת יש ל- ארבעה בנים). הוסף ל- אינדקס נוסף בהתאם לכללי עץ -3. (יתכן וכעת יש שלושה אינדקסים).. אם ל- v ארבעה בנים, פצל את לשני צמתים,, וחבר אותם כבנים לאב של צומת תוך שמירה על סדר האינדקסים הנכון. חזור לצעד 5. אם הוא שורש, צור צומת אשר בניו הם הצמתים ו- וסיים. אם ל- שלושה בנים, סיים. שינויים עולים (1), ומתבצעים רק על המסלול מהשורש לעלה שהוסף. 1. בזמן פיצול של צומת, הצמתים החדשים הם בעומק שווה לצומת שפוצל.. בפיצול השורש נוצר צומת חדש שמגדיל ב- 1 את העומק של כל הצמתים. 3. מסקנה: לאחר הוספה, כל העלים באותו עומק ולכל צומת פנימי 3- בנים...3.4.5.6 cs,technion 1 cs,technion 11
דוגמא להוצאה מעץ -3 (השאלה בלבד) הוצאת מפתח מעץ -3 סלק צומת: הוצא 14: בהוצאת איבר מעץ -3 מבוצעות הפעולות הבאות: 14 16, 19 3 15 16 19 14 16, 19 3 14 15 16 19 חיפוש מקומו של המפתח. הוצאת העלה שערכו. תיקון העץ כך שלכל צומת יהיו או 3 בנים. התיקון נעשה במסלול החיפוש של מהעלה שהוצא ועד השורש. בכל רמה נבצע (1) פעולות...3 השאל מאח: נמחיש זאת תחילה ע"י מספר דוגמאות. תיקון ערכי ההורים: 3 16 14 16, 19 15 19 3 15 16 19 3 15 16 19 cs,technion 14 cs,technion 13 פרוט פעולות תיקון בזמן הוצאה דוגמא להוצאה מעץ -3 (שני איחודים) הלוואה מאח: אחד הורים: הוצא 3:,, 14 16, 19 14 16, 19 14 15 16 19 3 14 15 16 19, איחוד הורים: סלק שורש מיותר: אחד הורים:,, 15, 15, 14 16, 19, 14 16, 19 14 15 16 19 14 15 16 19 cs,technion 16 cs,technion 15
אלגוריתם להוצאת מפתח מעץ -3 ניתוח פעולת ההוצאה נכונות: העומק של שום צומת אינו משתנה בזמן ההוצאה מלבד בסוף התהליך, במידה ומתבטל השורש, ואז העומק של כל הצמתים קטן באחד. לפיכך כל העלים נותרים בעומק שווה. כמו כן לכל צומת פנימי נותרים 3- בנים ונשמר יחס הסדר בין האינדקסים כנדרש. ניתוח זמן: כל פעולת חיפוש, הכנסה, והוצאה מעץ -3 דורשת (h) צעדי חישוב. כאשר h הוא גובה העץ, וזאת כי בכל רמה מבוצעות (1) פעולות. נזכר שעקב תכונות עץ -3 מתקיים כי ( h, = (log כאשר = הוא מספר המפתחות. סה"כ נקבל כי כל פעולה לוקחת ( log = (log צעדי חישוב. חפש את בעץ. אם לא נמצא בעץ, סיים. יהי העלה שערכו ויהי אביו. סלק את מהעץ.. אם הוא שורש ולו בן בודד, סלק את וסיים. אם ל- נותרו בנים, סיים. (המשך אם ל- נותר רק בן בודד). מקרה א (השאלה מאח): אם ל- יש אח ולו שלושה בנים, שאל בן מהאח וסיים. מקרה ב (איחוד הורים): אם לכל אח רק שני בנים, אחד את עם אח קרוב ל- ועדכן את המפתחות בצומת שנוצר. יהי ההורה של. חזור לצעד 4...3.4.5.6..8 cs,technion 18 cs,technion 1 Invariant מושג השמורה - השוואה בין עצי -3 ועצי AVL שני סוגי העצים תומכים בפעולות המילון בזמן (.(log בעץ -3 רשומות נשמרות רק בעלים. בעץ AVL רשומות נשמרות גם בצמתים פנימיים וגם בעלים. לכל שימוש בעץ -3 ישנה כנראה אנלוגיה גם בעץ AVL ולהפך. לרוב השימושים הבחירה בין השניים אינה עקרונית. מושג השמורה משמש במדעי המחשב בשביל להוכיח נכונות של קוד ושאר תכונות מועילות שלו. מעשית, זו תכונה של הנתונים שנשמרת בין פעולה לפעולה, ומניבה תועלת כלשהי. דוגמאות אותן ראינו: שמורת עץ חיפוש בינארי: כל צומת גדול מהצמתים בתת העץ השמאלי שלו וקטן מכל הצמתים בתת העץ הימני שלו. תועלת: חיפוש, הכנסה והוצאה בזמן,(h) כש- h גובה העץ. שמורת עץ :AVL לכל צומת גורם האיזון בתחום [1,0,1 ]. תועלת: ( h. = (log יחד עם שמורת עץ החיפוש הבינארי ותיקונים בזמן.(log ( אחרי הכנסה\הוצאה, מאפשר חיפוש, הכנסה והוצאה זמן (h) שמורות עץ -3: כל עלה באותה רמה, לכל צומת פנימי בין ל- 3 בנים. תועלת: חיפוש, הכנסה והוצאה ניתנים לביצוע בזמן ((log בעץ -3 (אם מעדכנים באמצעות איחוד, פיצול והלוואה מאח אחרי עדכונים). cs, Technion 0 cs,technion 19
דוגמא להכנסה לעץ מדרגה 4 (עץ -3-4) דוגמא: הכנס 5:,, 3, 14 5, 3 5 14 5 במקרה זה נדרש פיצול בודד. מחצית הצמתים (מעוגל כלפי מעלה) בענף השמאלי ומחצית (מעוגל כלפי מטה) בימני. 5,,, 3 14 5, 3 5 14 5 דוגמאות נוספות בתרגול. cs,technion הכללה - עצי (מדרגה ) הגדרה: עץ מדרגה הוא עץ המקיים את התכונות הבאות: כל הערכים נמצאים בעלים, כל העלים באותה רמה. 1. לכל צומת פנימי, פרט אולי לשורש, יש בנים כאשר. /. לשורש מספר הבנים הוא. לצומת פנימי בעל בנים יש 1 אינדקסים ממוינים לפי גודלם. 3. כל המפתחות הנמצאים בתת העץ ה- קטנים מהאינדקס ה- וגדולים או 4. 1. כל המפתחות הנמצאים בתת העץ הימני ביותר שווים לאינדקס ה- גדולים או שווים לאינדקס האחרון., דוגמא: עץ -3. דוגמא: עץ -3-4. חיפוש/הכנסה/הוצאה: כמו בעץ -3. כלומר, חיפוש לפי הגדרת עץ מדרגה, הכנסה או הוצאה של העלה המבוקש, ותיקון העץ מהעלה ועד השורש במסלול החיפוש כך,, 3, 3 14 5, 3 14 5 שמספר הבנים בכל רמה יעמוד בדרישות עץ בדרגה. cs,technion 1 עצי דרגות - מידע נוסף בעצי חיפוש בשימושים רבים של עצי חיפוש כדאי לשמור אינפורמציה נוספת בכל צומת. אינפורמציה זו משמשת להאצת פעולות נוספות הנדרשות מעצי חיפוש. למשל: הגדרה: האינדקס (rank) של מספר בקבוצה הוא מקומו בסדרה ממוינת של איברי. האינדקס של 5 בקבוצה {8,,,5} הוא. שימוש עיקרי לעץ (מסדי נתונים) בעיה I: לממש עץ חיפוש התומך, בנוסף לפעולות הכנסה\הוצאה\חיפוש, גם במציאת האינדקס של בעץ בזמן (h) כאשר h הוא גובה העץ. הזיכרון ברוב המחשבים מורכב משני חלקים: זיכרון ראשי,(RAM) קטן אך מהיר. זיכרון משני,(DISK) גדול, אך איטי יחסית לזיכרון הראשי. כאשר לא ניתן להכניס את כל מבנה הנתונים לזיכרון הראשי יש לפנות מדי פעם לזיכרון המשני לקבלת אינפורמציה נוספת. זמן הגישה לזיכרון המשני גבוה מאד יחסית לזמן הקריאה של הנתונים והקריאה נעשית בבלוקים. 1 00 בעיה :II לממש עץ חיפוש התומך בחישוב סכום האיברים בעץ הקטנים מ בזמן.(h) בבעיות אלה יש לשמור מידע נוסף בעץ החיפוש כדי שנוכל לממש את הפעולות הנוספות ביעילות הנדרשת. אנו ניראה מהו המידע שיש לשמור וכיצד להשתמש בו. אח"כ ניראה כיצד לעדכן את המידע הנוסף כך שהעץ יישאר מאוזן. cs,technion 4 1 00 1 00 עצי מדרגה גבוהה מספקים פתרון: בכל צומת פנימי נשמור כמספר הבלוקים של מפתחות שעדיין מאפשרים חיפוש מהיר בזיכרון הראשי. מספר הגישות לזיכרון המשני תלוי במספר הרמות (וזהו מספר נמוך) הנקבע ע"י גודל הבלוק. המחיר יהיה בסקירת המפתחות על מנת לקבוע את המשך החיפוש בעץ (תוך שימוש בזיכרון המהיר). cs,technion 3
עץ דרגות Tree) (Rank עץ דרגות Tree) (Rank בעיה :II לממש עץ חיפוש התומך במציאת סכום האיברים הקטנים מאיבר בזמן.(h) 0 8 פתרון: נשמור בכל צומת גם את סכום האיברים 13 5 9 בתת-העץ ששורשו. נסמן מספר זה ב-.() 6 6 3 9 60 0 15 15 5 5 יהא h מסלול החיפוש של. לכל צומת דוגמא: סכום האיברים הקטנים מ- 1 בעץ שקטן או שווה מ- ב- h נוסיף את הנ"ל הוא: ערכו של ושל כל הצמתים בתת העץ = 55 0) (15 + + 9) ( + + 13) (8 + השמאלי של. בעזרת השדה () ניתן לחשב זאת כך: =, + (. ). מסקנה: זמן הריצה הוא.(h) כיצד נבטיח זמן ריצה (?(log cs,technion 6 בעיה I: לממש עץ חיפוש התומך במציאת האינדקס של איבר. 15 פתרון: נשמור בכל צומת גם את מספר הצמתים 8 6 בתת-העץ ששורשו. נסמן מספר זה ב-.() ערך זה מופיע משמאל לצמתים באיור 5 3 יהא h מסלול החיפוש של. לכל צומת 1 1 3 1 1 1 שקטן או שווה מ- ב- h נספור את 1 1. וכל הצמתים בתת העץ השמאלי של בעזרת השדה () ניתן לחשב זאת כך: =,, + + 1 + 1 =. =, 1 + (. ). הוא עץ בו בכל צומת tree) (rank הגדרה: עץ דרגות. בתת-העץ ששורשו מסקנה: בעץ דרגות מציאת ה- rank דורשת זמן.(h) נשמרים מספר הצמתים עץ דרגות הוא דוגמא למבנה נתונים בו בכל צומת נשמר מידע על תת-העץ שמתחתיו. סוג המידע השמור תלוי בבעיה אותה יש לפתור. cs,technion 5 עדכון השדה הנוסף עץ דרגות מאוזן tree) (Balanced Rank בעיה: לממש עץ חיפוש מאוזן התומך במציאת האינדקס בזמן ).(log של איבר (rank) כיצד נעדכן את () מספר הצמתים בתת העץ בכל תת-עץ של עץ? AVL 1. בזמן הכנסה נגדיל את () ב- 1 לאורך המסלול מהשורש לעלה שהוכנס. בזמן הסרה נקטין את () ב- 1 לאורך המסלול מהשורש לצומת שהוסר. בזמן גלגול נעדכן את השדה כנדרש, תוך שימוש בעובדה ש-( ( תלוי רק בערכי () של תת העץ, שכבר תוקנו.. פתרון: לדוגמא, באמצעות עץ.AVL נשמור בכל צומת את מספר הצמתים בתת-העץ ששורשו. זיכרו שסימנו מספר זה ב-.() () למשל בגלגול נעדכן כך: + + + ( ) נדאג לעדכן את () בזמן הכנסות והסרות ובזמן גלגולים. () ( ) ( ) ( ) ( ) ( ) ( ) 1 + + cs,technion 8 cs,technion
דוגמא נוספת כיצד נעדכן את () סכום המפתחות בתת העץ בכל תת-עץ של עץ? AVL באופן דומה לאופן עדכון () בשקף הקודם - בזמן הכנסה\הסרה נעדכן את הסכום לאורך המסלול מהשורש לעלה שהוכנס\צומת שהוסר. בזמן גלגול נעדכן את השדה כנדרש. () למשל בגלגול נעדכן כך: + + + + ( ) () ( ) ( ) ( ) ( ) + ( ) ( ) + cs,technion 30 תרגיל בית: מהו העדכון בגלגולים האחרים? כיצד ניתן לתחזק שדות () ו-( ( בעץ -3? cs,technion 9